home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-12-31 | 59.4 KB | 1,867 lines |
- Thu Dec 28
-
- too slow on mac-mf; run gprof
-
- [15] 38.81 11.52 8.00 9498974+8346392 rx_rexp_equal [15]
- __
- added code to rx_rexp_equal to count n calls and result bias
- int re_abs = 0;
- int re_ans = 0;
-
- /**/
- ++re_abs;
- re_ans += (ret*2 - 1);
-
- in gdb, br exit and check those
-
- Breakpoint 1, 0x1359a in exit ()
- (gdb) p re_abs
- $1 = 3416821
- (gdb) p re_ans
- $2 = -2793859
-
- 82% likely to not be equal
- --
-
- notice:
-
- [16] 15.91 8.00 0.00 9847935 rx_bitset_is_equal [16]
-
- the test in rx_rexp_equal (a, b) is
-
- ret = ( (a->type == b->type)
- && (a->params.cset_size == b->params.cset_size)
- && (a->params.intval == b->params.intval)
- && (a->params.intval2 == b->params.intval2)
- && rx_bitset_is_equal (a->params.cset_size,
- a->params.cset,
- b->params.cset)
- && rx_rexp_equal (a->params.pair.left, b->params.pair.left)
- && rx_rexp_equal (a->params.pair.right, b->params.pair.right));
-
-
- and gprof confirms that rx_bitset_is_equal isn't being called from
- anyplace else.
-
- most calls are useless since most nodes prbly aren't event cset
- nodes.
-
- re-order and prune...
-
- before (-pg -g)
- 20.74user 0.31system 0:22.02elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
-
- after
- 19.46user 0.15system 0:20.60elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
-
-
- gprof says:
-
- 37.46 7.33 7.33 mcount
- 17.12 3.35 10.68 4021435 rx_rexp_equal
- 8.33 1.63 12.31 1114696 rx_bitset_is_equal
-
- [13] 56.78 1.38 5.57 130048 rx_hash_store [13]
- [15] 40.69 3.35 1.63 2275803+1745632 rx_rexp_equal [15]
-
- that seems awefully high for such short input ... perhaps rx_hash_store
- is being called too often. These functions can get faster, but not
- an order of magnitude faster, which is what we're really after.
-
- i think simplified regexps aren't cached reasonably.
-
-
- cache cached_rexp in rexp_node
-
- 17.05user 0.06system 0:17.14elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
-
- % time seconds cumsec calls function
- 35.05 5.98 5.98 mcount
- 15.89 2.71 8.69 3271085 rx_rexp_equal
- 7.74 1.32 10.01 919773 rx_bitset_is_equal
-
-
-
- Thu Dec 28 15:28:26 PST 1995
-
- -O3 comparison to /usr/bin/sed (GNU sed version 2.05) show about an
- O(10) slowdown.
-
- -pg -g:
-
- *** Start "time ./sed -f sep.sed < sep.inp > tmp" in ~/vac/rxdispencer/sed/testsuite/ at 15:30:08
- 0.66user 0.06system 0:00.81elapsed 88%CPU (0avgtext+0avgdata 0maxresident)k
-
- % time seconds cumsec calls function
- 37.31 0.25 0.25 mcount
- 10.45 0.07 0.32 41465 rx_bitset_hash
- 7.46 0.05 0.37 43124 rx_rexp_equal
- 5.97 0.04 0.41 7003 rx_hash_store
- 4.48 0.03 0.44 33682 unfa_equal
- 4.48 0.03 0.47 12985 malloc
- 2.99 0.02 0.49 6899 rx_make_solutions
- 2.99 0.02 0.51 5727 rx_basic_make_solutions
- 1.49 0.01 0.52 89829 rx_rexp_hash
- 1.49 0.01 0.53 9491 nfa_set_enjoin
- 1.49 0.01 0.54 7791 hash_se_prog
- 1.49 0.01 0.55 7775 se_list_cmp
- 1.49 0.01 0.56 7760 rx_free_solutions
- 1.49 0.01 0.57 7204 rx_next_solution
- 1.49 0.01 0.58 6992 bzero
- 1.49 0.01 0.59 6899 canonical_unfa
- 1.49 0.01 0.60 6899 rx_free_unfa
- 1.49 0.01 0.61 6899 rx_start_superstate
- 1.49 0.01 0.62 6899 rx_terminate_system
- 1.49 0.01 0.63 6899 rx_unfa
- 1.49 0.01 0.64 6899 rx_unfa_rx
- 1.49 0.01 0.65 5727 init_basic_once
- 1.49 0.01 0.66 29 __sbrk
- 1.49 0.01 0.67 20 rx_superstate
-
-
- sep.sed:
- --------
-
- # inspired by an autoconf generated configure script.
- s%/[^/][^/]*$%%
-
-
- sep.inp:
- --------
-
- miss mary mack mack//mack/ran down/the track track track
- slashes\aren't%used enough/in/casual-conversation///
- possibly sentences would be more attractive if they ended in two slashes//
-
-
- Some call graph entries are revealing:
-
- ----------------------------------------
- 0.00 0.42 163/163 rx_regexec [5]
- [2] 99.97 0.00 0.42 163 rx_regmatch [2]
- 0.02 0.30 5727/5727 rx_basic_make_solutions [9]
- 0.01 0.07 5727/5727 rx_next_solution [15]
- 0.00 0.02 5727/5727 rx_basic_free_solutions [23]
-
- rx_regmatch is called 163 times -- almost once per character
- in the input.
-
- It calls rx_basic_make_solutions 5727 times because for each starting
- position, it calls rx_basic_make_solutions for each possible length
- of match from longest to shortest until a match is found or all matches
- tried.
-
- The fastmap optimization could save a lot here but would lose on a
- pattern starting with "." or "[a-zA-Z]". In contrast, sed 2.05 doesn't
- slow down noticably when the command is changed to "s%./[^/][^/]*$%%".
-
- rx_basic_make_solutions is called 5727 times
-
- more from the call graph:
-
- 0.01 0.20 6899/6899 rx_unfa [10]
- [11] 49.68 0.01 0.20 6899 canonical_unfa [11]
-
- there is a caching optimization in rx_unfa for the purpose of avoiding
- calls to canonical_unfa. apparently it is buggy. why?
-
- it depends on the caching of simplified regexps....does that work?
- Here is a classic profiling trick, to find out:
-
- Program exited normally.
- Breakpoint 1 at 0x109f1: file ../../rx/rxsimp.c, line 67.
- Breakpoint 2 at 0x10a18: file ../../rx/rxsimp.c, line 72.
- (gdb) comm 1
- Type commands for when breakpoint 1 is hit, one per line.
- End with a line saying just "end".
- silent
- cont
- end
- (gdb) comm 2
- Type commands for when breakpoint 2 is hit, one per line.
- End with a line saying just "end".
- silent
- cont
- end
- (gdb) run
- [....]
- (gdb) i br
- 1 breakpoint keep y 0x000109f1 in rx_simple_rexp at ../../rx/rxsimp.c:67
- breakpoint already hit 5802 times
- silent
- cont
- 2 breakpoint keep y 0x00010a18 in rx_simple_rexp at ../../rx/rxsimp.c:72
- breakpoint already hit 245 times
- silent
- cont
-
- which means that caching is working just fine here (245:5802 miss ratio)
-
- There's still a puzzle.
-
- The expression in "s%/[a-z][a-z]*$%%" comes out to:
-
- (gdb) p print_rexp (256, 0, preg->pattern)
- Node 3 type 1 (r_concat), iv=0( ), iv2=0, len=-1 obs=1 cs=nil
- Node -1 type 0 (r_cset), iv=0( ), iv2=0, len=1 obs=0 cs=[/]
- Node 2 type 1 (r_concat), iv=0( ), iv2=0, len=-1 obs=1 cs=nil
- Node -1 type 0 (r_cset), iv=0( ), iv2=0, len=1 obs=0 cs=[abcdefghijklmnopqrstuvwxyz]
- Node 1 type 1 (r_concat), iv=0( ), iv2=0, len=-1 obs=1 cs=nil
- Node -1 type 4 (r_star), iv=0( ), iv2=0, len=-1 obs=0 cs=nil
- Node -1 type 0 (r_cset), iv=0( ), iv2=0, len=1 obs=0 cs=[abcdefghijklmnopqrstuvwxyz]
- nil
- Node 0 type 8 (r_conext), iv=36($), iv2=0, len=0 obs=1 cs=nil
-
- even 245 non-cached calls to rx_simple_rexp seems way out of hand. Every node
- of the tree can be simplified and cached in at most:
-
- 8 ; 1 call per node
- 6 ; 2 recursive calls per concat
- 1 ; 1 recursive call per star
- --
- 15 ; 15 calls
-
- probably fewer as some calls are likely counted twice. So why 245?
-
- pop to the main perf problem which was:
-
- 0.01 0.20 6899/6899 rx_unfa [10]
- [11] 49.68 0.01 0.20 6899 canonical_unfa [11]
-
- there is a caching optimization in rx_unfa for the purpose of avoiding
- calls to canonical_unfa. apparently it is buggy. why?
-
-
- What expressions is rx_unfa called for?
-
- $40 = (struct rexp_node *) 0x5adc0
- $41 = (struct rexp_node *) 0x5adc0
- $42 = (struct rexp_node *) 0x5adc0
- $43 = (struct rexp_node *) 0x5adc0
- [....]
-
-
- Poking around in gdb says that expression's unfa is cached properly
- but the cache is wrongly cleared here:
-
-
- => rx_basic_free_solutions (solutions);
- if (answer == rx_yes)
- ....
- in rxposix.c.
-
- This is only a few "finish" and "next" steps away from where the cache
- is set. So, it was found just by searching forward in the coarsest
- steps from a call to rx_unfa. (Watchpoints crash gdb and sometimes linux
- under linux).
-
- set a breakpoint there, ignored it 20 times, and confirmed that
- the cache is cleared.
-
- Before:
- (gdb) set $exp=solutions->exp
-
- (gdb) p $exp->simplified
- $3519 = (struct rexp_node *) 0x5adc0
- (gdb) p $exp->simplified->cr
- $3520 = (struct rx_cached_rexp *) 0x57000
- (gdb) p $exp->refs
- $3521 = 2
- (gdb) p $exp->simplified->refs
- $3522 = 3
-
- After:
-
- (gdb) p $exp->simplified
- $3526 = (struct rexp_node *) 0x5adc0
- (gdb) p $exp->simplified->cr
- $3523 = (struct rx_cached_rexp *) 0x0
- (gdb) p $exp->refs
- $3525 = 1
- (gdb) p $exp->simplified->refs
- $3524 = 3
-
- so next time, step into it.
-
- ugh.... rx_free_unfa (unfa) was simply clearing the cache in
- what was obviously the wrong place (when the unfa refcount dropped
- to 0 instead of when it was actually flushed from the cache.)
- should have checked here a few steps ago, but writing the LOG
- was a distracting source of amusment.
-
-
- rebuild with fix
-
- before:
- *** Start "time ./sed -f sep.sed < sep.inp > tmp" in ~/vac/rxdispencer/sed/testsuite/ at 15:30:08
- 0.66user 0.06system 0:00.81elapsed 88%CPU (0avgtext+0avgdata 0maxresident)k
-
-
- after
- *** Start "time ./sed -f sep.sed < sep.inp > tmp" in /home/lord/vac/rxdispencer/sed/testsuite/ at 16:34:52
- 0.35user 0.05system 0:00.45elapsed 88%CPU (0avgtext+0avgdata 0maxresident)k
-
-
- 2 or 3 more of those, and we're totally in business.
-
-
-
-
- Thu Dec 28 15:28:26 PST 1995
-
- *** Start "time ./sed -f sep.sed < sep.inp > tmp" in /home/lord/vac/rxdispencer/sed/testsuite/ at 16:34:52
- 0.35user 0.05system 0:00.45elapsed 88%CPU (0avgtext+0avgdata 0maxresident)k
-
- profile has changed considerably. good!
-
- % time seconds cumsec calls function
- 38.89 0.14 0.14 mcount
- 16.67 0.06 0.20 12985 malloc
- 11.11 0.04 0.24 8085 eclose_node
- 8.33 0.03 0.27 6137 rx_soluntion_fit_p
- 5.56 0.02 0.29 12637 free
- 2.78 0.01 0.30 7760 rx_free_solutions
- 2.78 0.01 0.31 6899 rx_make_solutions
- 2.78 0.01 0.32 6899 rx_terminate_system
- 2.78 0.01 0.33 6899 rx_unfa
- 2.78 0.01 0.34 6137 rx_fit_p
- 2.78 0.01 0.35 163 rx_regmatch
- 2.78 0.01 0.36 20 rx_superstate
-
- eclose_node?!?!?!
-
- but more pressing is that some tests now segfault.
-
- ...
-
- -O3 causes the segfaults. hopefully this is a compiler bug. i think
- i've seen this on linux before.
-
- -O has no problem.
-
-
-
-
- Stepping back a bit...here is the state of some timing tests.
-
- This is -O vs. the mysterious sed 2.05 in /usr/bin.
-
-
- time ./sed -f enable.sed < enable.inp > tmp
- 0.02user 0.03system 0:00.16elapsed 31%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp enable.good tmp
-
- time /usr/bin/sed -f enable.sed < enable.inp > tmp2
- 0.00user 0.01system 0:00.10elapsed 10%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp enable.good tmp2
-
-
-
-
- time ./sed -f sep.sed < sep.inp > tmp
- 0.13user 0.02system 0:00.16elapsed 93%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sep.good tmp
-
- time /usr/bin/sed -f sep.sed < sep.inp > tmp2
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sep.good tmp2
-
-
-
-
- time ./sed -f inclib.sed < inclib.inp > tmp
- 0.10user 0.01system 0:00.12elapsed 91%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp inclib.good tmp
-
- time /usr/bin/sed -f inclib.sed < inclib.inp > tmp2
- 0.00user 0.02system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp inclib.good tmp2
-
-
-
-
- time ./sed -f 8bit.sed < 8bit.inp > tmp
- 0.03user 0.02system 0:00.05elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp 8bit.good tmp
-
- time /usr/bin/sed -f 8bit.sed < 8bit.inp > tmp2
- 0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp 8bit.good tmp2
-
-
-
-
- time ./sed -f newjis.sed < newjis.inp > tmp
- 0.03user 0.01system 0:00.09elapsed 44%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp newjis.good tmp
-
- time /usr/bin/sed -f newjis.sed < newjis.inp > tmp2
- 0.00user 0.03system 0:00.06elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp newjis.good tmp2
-
-
-
-
- time ./sed -n -f cv-vars.sed < cv-vars.inp > tmp
- 0.02user 0.05system 0:00.08elapsed 87%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp cv-vars.good tmp
-
- time /usr/bin/sed -n -f cv-vars.sed < cv-vars.inp > tmp2
- 0.01user 0.02system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp cv-vars.good tmp2
-
-
-
-
- time ./sed -f manis.sed < manis.inp > tmp
- 0.44user 0.03system 0:00.48elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp manis.inp tmp
-
- time /usr/bin/sed -f manis.sed < manis.inp > tmp2
- 0.02user 0.02system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp manis.inp tmp2
-
-
-
-
- time ./sed -f xabcx.sed < xabcx.inp > tmp
- 0.00user 0.04system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp xabcx.good tmp
-
- time /usr/bin/sed -f xabcx.sed < xabcx.inp > tmp2
- 0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp xabcx.good tmp2
-
-
-
-
- time ./sed -f dollar.sed < dollar.inp > tmp
- 0.00user 0.03system 0:00.05elapsed 60%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp dollar.good tmp
-
- time /usr/bin/sed -f dollar.sed < dollar.inp > tmp2
- 0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp dollar.good tmp2
-
-
-
-
- time ./sed -f noeol.sed < noeol.inp > tmp
- 0.01user 0.03system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp noeol.good tmp
-
- time /usr/bin/sed -f noeol.sed < noeol.inp > tmp2
- 0.00user 0.02system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp noeol.good tmp2
-
-
-
-
- time ./sed -f sub-num.sed < sub-num.inp > tmp
- 0.01user 0.03system 0:00.05elapsed 80%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sub-num.good tmp
-
- time /usr/bin/sed -f sub-num.sed < sub-num.inp > tmp2
- 0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sub-num.good tmp2
-
-
-
-
- time ./sed -f sub-all.sed < sub-num.inp > tmp
- 0.02user 0.02system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sub-all.good tmp
-
- time /usr/bin/sed -f sub-all.sed < sub-num.inp > tmp2
- 0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sub-all.good tmp2
-
-
-
-
- time ./sed -f subwrite.sed < subwrite.inp > tmp1
- 0.03user 0.02system 0:00.05elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp subwrite.good1 tmp1
- cmp subwrite.good2 tmp2
-
- time /usr/bin/sed -f subwrite.sed < subwrite.inp > tmp1
- 0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp subwrite.good1 tmp1
- cmp subwrite.good2 tmp2
-
-
-
-
- time ./sed -f head.sed < head.inp > tmp
- 0.01user 0.00system 0:00.01elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp head.good tmp
-
- time /usr/bin/sed -f head.sed < head.inp > tmp2
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp head.good tmp2
-
-
-
- time ./sed -n -f middle.sed < head.inp > tmp
- 0.01user 0.00system 0:00.02elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp middle.good tmp
-
- time /usr/bin/sed -n -f middle.sed < head.inp > tmp2
- 0.00user 0.01system 0:00.02elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp middle.good tmp2
-
-
-
-
- time ./sed --file=newjis.sed < newjis.inp > tmp
- 0.02user 0.01system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp newjis.good tmp
-
- time /usr/bin/sed --file=newjis.sed < newjis.inp > tmp2
- 0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp newjis.good tmp2
-
-
-
- time ./sed --quiet -f cv-vars.sed < cv-vars.inp > tmp
- 0.01user 0.04system 0:00.07elapsed 71%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp cv-vars.good tmp
-
- time /usr/bin/sed --quiet -f cv-vars.sed < cv-vars.inp > tmp2
- 0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp cv-vars.good tmp2
-
-
-
-
-
-
- So far, most often ./sed loses (not always). But we're still winning:
-
-
- time ./sed -f maddingcrowd.sed < maddingcrowd.inp > tmp
- 2.17user 0.22system 0:02.40elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp maddingcrowd.good
-
- # DO NOT time /usr/bin/sed -f maddingcrowd.sed < maddingcrowd.inp > tmp2
- # sed 2.05.... t->+inf
-
-
-
- but also still losing:
-
- time /usr/bin/sed -f mac-mf.sed < mac-mf.inp > tmp" in ~/vac/rxdispencer/sed/testsuite/ at 17:19:08
- 0.29user 0.09system 0:00.39elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
-
-
- time ./sed -f mac-mf.sed < mac-mf.inp > tmp" in ~/vac/rxdispencer/sed/testsuite/ at 17:19:08
- t->inf
-
-
-
-
-
- Fri Dec 29 12:03:28 PST 1995
-
-
- ran mac-mf.sed on small input for profiling.
-
- 32.17 1.66 1.66 mcount
- 10.27 0.53 2.19 262506 malloc
- 6.98 0.36 2.55 260030 free
- 6.20 0.32 2.87 129914 rx_make_solutions
- 6.01 0.31 3.18 129914 rx_start_superstate
- 5.43 0.28 3.46 129978 eclose_node
- 3.68 0.19 3.65 129972 hash_se_prog
- 3.49 0.18 3.83 4205 rx_regmatch
- 3.10 0.16 3.99 129916 rx_next_solution
- 3.10 0.16 4.15 129914 rx_unfa
- 2.52 0.13 4.28 129728 rx_basic_make_solutions
- 2.33 0.12 4.40 129914 rx_free_unfa
- 1.94 0.10 4.50 132334 bzero
- 1.74 0.09 4.59 161119 rx_free_rexp
- 1.36 0.07 4.66 161229 rx_save_rexp
- 1.16 0.06 4.72 130096 rx_free_solutions
- 1.16 0.06 4.78 129992 nfa_set_enjoin
- 1.16 0.06 4.84 129914 rx_terminate_system
- 0.97 0.05 4.89 129958 rx_state_possible_futures
- 0.97 0.05 4.94 129728 rx_basic_free_solutions
- 0.78 0.04 4.98 129914 rx_unfa_rx
- 0.58 0.03 5.01 129914 rx_init_system
- 0.58 0.03 5.04 129914 se_list_cmp
- 0.58 0.03 5.07 31241 rx_simple_rexp
- 0.39 0.02 5.09 698 inverse_translation
- 0.19 0.01 5.10 23082 rx_fit_p
- 0.19 0.01 5.11 4820 inchar
- 0.19 0.01 5.12 364 rx_hash_store
- 0.19 0.01 5.13 125 rx_bitset_difference
- 0.19 0.01 5.14 94 __sbrk
- 0.19 0.01 5.15 1 __isatty
- 0.19 0.01 5.16 1 compile_program
-
- malloc is top, called many many times -- approx. half the calls to
- that must be from rx_make_solutions.
-
- Most of those are from rx_basic_make_solutions.
-
- All of those are from rx_regmatch, which is called far fewer times
- (approx 1:31).
-
- All of those (in this case) are from rx_regexec, called only
- 138 times.
-
-
- fastmapping can prune many calls from regexec to regmatch so add
- the fastmapping optimization copying/fixing code from an older rx.
-
- before fastmapping:
- time ./sed -f mac-mf.sed < ,a
- 5.14user 0.14system 0:08.13elapsed 64%CPU (0avgtext+0avgdata 0maxresident)k
-
- after fastmapping:
- ./sed -f mac-mf.sed < ,a
- 0.85user 0.09system 0:01.08elapsed 87%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- rerun -O timing/bug tests
-
- some bug in the spencer test....
-
- time ./sed -f enable.sed < enable.inp > tmp
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp enable.good tmp
-
- time /usr/bin/sed -f enable.sed < enable.inp > tmp2
- 0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp enable.good tmp2
-
-
-
-
- time ./sed -f sep.sed < sep.inp > tmp
- 0.02user 0.03system 0:00.05elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sep.good tmp
-
- time /usr/bin/sed -f sep.sed < sep.inp > tmp2
- 0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sep.good tmp2
-
-
-
-
- time ./sed -f inclib.sed < inclib.inp > tmp
- 0.03user 0.00system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp inclib.good tmp
-
- time /usr/bin/sed -f inclib.sed < inclib.inp > tmp2
- 0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp inclib.good tmp2
-
-
-
-
- time ./sed -f 8bit.sed < 8bit.inp > tmp
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp 8bit.good tmp
-
- time /usr/bin/sed -f 8bit.sed < 8bit.inp > tmp2
- 0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp 8bit.good tmp2
-
-
-
-
- time ./sed -f newjis.sed < newjis.inp > tmp
- 0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp newjis.good tmp
-
- time /usr/bin/sed -f newjis.sed < newjis.inp > tmp2
- 0.00user 0.02system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp newjis.good tmp2
-
-
-
-
- time ./sed -n -f cv-vars.sed < cv-vars.inp > tmp
- 0.01user 0.05system 0:00.06elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp cv-vars.good tmp
-
- time /usr/bin/sed -n -f cv-vars.sed < cv-vars.inp > tmp2
- 0.01user 0.02system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp cv-vars.good tmp2
-
-
-
-
- time ./sed -f manis.sed < manis.inp > tmp
- 0.10user 0.03system 0:00.13elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp manis.inp tmp
-
- time /usr/bin/sed -f manis.sed < manis.inp > tmp2
- 0.01user 0.03system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp manis.inp tmp2
-
-
-
-
- time ./sed -f xabcx.sed < xabcx.inp > tmp
- 0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp xabcx.good tmp
-
- time /usr/bin/sed -f xabcx.sed < xabcx.inp > tmp2
- 0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp xabcx.good tmp2
-
-
-
-
- time ./sed -f dollar.sed < dollar.inp > tmp
- 0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp dollar.good tmp
-
- time /usr/bin/sed -f dollar.sed < dollar.inp > tmp2
- 0.00user 0.02system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp dollar.good tmp2
-
-
-
-
- time ./sed -f noeol.sed < noeol.inp > tmp
- 0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp noeol.good tmp
-
- time /usr/bin/sed -f noeol.sed < noeol.inp > tmp2
- 0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp noeol.good tmp2
-
-
-
-
- time ./sed -f sub-num.sed < sub-num.inp > tmp
- 0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sub-num.good tmp
-
- time /usr/bin/sed -f sub-num.sed < sub-num.inp > tmp2
- 0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sub-num.good tmp2
-
-
-
-
- time ./sed -f sub-all.sed < sub-num.inp > tmp
- 0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sub-all.good tmp
-
- time /usr/bin/sed -f sub-all.sed < sub-num.inp > tmp2
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sub-all.good tmp2
-
-
-
-
- time ./sed -f subwrite.sed < subwrite.inp > tmp1
- 0.02user 0.00system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp subwrite.good1 tmp1
- cmp subwrite.good2 tmp2
-
- time /usr/bin/sed -f subwrite.sed < subwrite.inp > tmp1
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp subwrite.good1 tmp1
- cmp subwrite.good2 tmp2
-
-
-
-
- time ./sed -f head.sed < head.inp > tmp
- 0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp head.good tmp
-
- time /usr/bin/sed -f head.sed < head.inp > tmp2
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp head.good tmp2
-
-
-
-
- time ./sed -n -f middle.sed < head.inp > tmp
- 0.00user 0.01system 0:00.01elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp middle.good tmp
-
- time /usr/bin/sed -n -f middle.sed < head.inp > tmp2
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp middle.good tmp2
-
-
-
-
- time ./sed -f maddingcrowd.sed < maddingcrowd.inp > tmp
- 2.13user 0.26system 0:02.76elapsed 86%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp maddingcrowd.good
-
- time /usr/bin/sed -f maddingcrowd.sed < maddingcrowd.inp > tmp2
- t->inf
-
-
-
-
- time ./sed -f mac-mf.sed < mac-mf.inp > tmp
- 21.74user 0.16system 0:21.90elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp mac-mf.good
-
- time /usr/bin/sed -f mac-mf.sed < mac-mf.inp > tmp2
- 0.28user 0.11system 0:00.39elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp2 mac-mf.good
-
-
-
-
- time ./sed -f khadafy.sed < khadafy.inp > tmp
- 0.02user 0.01system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp khadafy.inp
-
- time /usr/bin/sed -f khadafy.sed < khadafy.inp > tmp2
- 0.01user 0.03system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp2 khadafy.inp
-
-
-
- time ./sed -f linecnt.sed < linecnt.inp > tmp
- 0.00user 0.01system 0:00.01elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp linecnt.good
-
- time /usr/bin/sed -f linecnt.sed < linecnt.inp > tmp2
- 0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp2 linecnt.good
-
-
-
- Generally close. One very winning case (maddingcrowd). One pretty much
- losing case (but not as bad as before) mac-mf.
-
-
- All tests pass except spencer.
-
- All tests reasonable performance except "distrib" and "mac-mf".
-
-
- Spencer:
- was typo in test suite but that fixed, still bugs:
-
- Test #37 failed!
- Test #62 failed!
-
-
- #37 -- test suite was wrong -- sed, right -- pattern bogus.
- lines 2945-2947 of 2003.2-1992
-
- #62 -- test suite wrong again -- sed, right -- pattern not bogus
- lines 3058-3060 and 3066-3077 of 2003.2-1992
-
- spencer test passes with those fixes.
-
-
-
- Fri Dec 29 13:14:02 PST 1995
-
-
- last development before release issues:
-
- All tests reasonable performance except "distrib" and "mac-mf".
-
-
-
- time ./sed -f mac-mf.sed < mac-mf.inp > tmp
- 22.10user 0.22system 0:22.52elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp mac-mf.good
-
- time /usr/bin/sed -f mac-mf.sed < mac-mf.inp > tmp2
- 0.31user 0.09system 0:00.40elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp2 mac-mf.good
-
- % time seconds cumsec calls function
- 34.18 19.43 19.43 mcount
- 6.03 3.43 22.86 2545726 free
- 5.96 3.39 26.25 2561762 malloc
- 5.44 3.09 29.34 1324635 eclose_node
- 3.83 2.18 31.52 41025 rx_regmatch
- 3.61 2.05 33.57 1276850 rx_next_solution
- 3.36 1.91 35.48 1276625 rx_start_superstate
- 3.22 1.83 37.31 1276625 rx_make_solutions
- 3.17 1.80 39.11 1276625 rx_free_unfa
- 2.94 1.67 40.78 1217560 rx_fit_p
- 2.41 1.37 42.15 1265155 rx_basic_make_solutions
- 2.27 1.29 43.44 1276625 rx_unfa
- 2.20 1.25 44.69 1223796 rx_simple_rexp
- 2.13 1.21 45.90 1280457 bzero
- 2.01 1.14 47.04 1287172 rx_free_solutions
- 1.55 0.88 47.92 1217560 rx_soluntion_fit_p
- 1.51 0.86 48.78 1278517 rx_state_possible_futures
- 1.44 0.82 49.60 1312946 hash_se_prog
- 1.41 0.80 50.40 1276625 rx_unfa_rx
- 1.39 0.79 51.19 1217560 rx_str_vmfn
- 1.18 0.67 51.86 2500305 rx_free_rexp
- 1.13 0.64 52.50 2500621 rx_save_rexp
- 1.11 0.63 53.13 1381011 nfa_set_enjoin
- 0.83 0.47 53.60 1312343 se_list_cmp
- 0.83 0.47 54.07 12948 rx_hash_store
- 0.77 0.44 54.51 1265155 init_basic_once
-
-
- which means, really, that no function dominates and again, avoiding
- the many many calls to rx_regmatch is key.
-
- looking at the script, there are many anchored patterns and i recall
- an old rx optimization "don't waste time trying an anchored match
- in the middle of a pattern." Let's put that back in.
-
-
- -pg before is_anchored
- time ./sed -f mac-mf.sed < mac-mf.inp > tmp
- 22.10user 0.22system 0:22.52elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp mac-mf.good
-
-
- -pg after
-
- time ./sed -f mac-mf.sed < mac-mf.inp > tmp
- 8.22user 0.31system 0:15.97elapsed 53%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp mac-mf.good
-
-
- also:
-
- 2.60 0.22 5.76 141219 rx_make_solutions
-
- meaning that we cut down about O(10) on calls to rx_make_solutions.
-
- *** Start "make" in /home/lord/vac/rxdispencer/sed/testsuite/ at 13:49:53
- time ./sed -f enable.sed < enable.inp > tmp
- 0.01user 0.04system 0:01.75elapsed 2%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp enable.good tmp
- time /usr/bin/sed -f enable.sed < enable.inp > tmp2
- 0.01user 0.03system 0:00.12elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp enable.good tmp2
- time ./sed -f sep.sed < sep.inp > tmp
- 0.02user 0.01system 0:00.25elapsed 12%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sep.good tmp
- time /usr/bin/sed -f sep.sed < sep.inp > tmp2
- 0.00user 0.04system 0:00.16elapsed 25%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sep.good tmp2
- time ./sed -f inclib.sed < inclib.inp > tmp
- 0.02user 0.01system 0:00.05elapsed 60%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp inclib.good tmp
- time /usr/bin/sed -f inclib.sed < inclib.inp > tmp2
- 0.00user 0.02system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp inclib.good tmp2
- time ./sed -f 8bit.sed < 8bit.inp > tmp
- 0.00user 0.01system 0:00.03elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp 8bit.good tmp
- time /usr/bin/sed -f 8bit.sed < 8bit.inp > tmp2
- 0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp 8bit.good tmp2
- time ./sed -f newjis.sed < newjis.inp > tmp
- 0.01user 0.01system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp newjis.good tmp
- time /usr/bin/sed -f newjis.sed < newjis.inp > tmp2
- 0.00user 0.04system 0:00.10elapsed 40%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp newjis.good tmp2
- time ./sed -n -f cv-vars.sed < cv-vars.inp > tmp
- 0.02user 0.03system 0:00.40elapsed 12%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp cv-vars.good tmp
- time /usr/bin/sed -n -f cv-vars.sed < cv-vars.inp > tmp2
- 0.00user 0.04system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp cv-vars.good tmp2
- time ./sed -f manis.sed < manis.inp > tmp
- 0.07user 0.04system 0:00.16elapsed 68%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp manis.inp tmp
- time /usr/bin/sed -f manis.sed < manis.inp > tmp2
- 0.00user 0.04system 0:00.16elapsed 25%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp manis.inp tmp2
- time ./sed -f xabcx.sed < xabcx.inp > tmp
- 0.00user 0.02system 0:00.05elapsed 40%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp xabcx.good tmp
- time /usr/bin/sed -f xabcx.sed < xabcx.inp > tmp2
- 0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp xabcx.good tmp2
- time ./sed -f dollar.sed < dollar.inp > tmp
- 0.00user 0.02system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp dollar.good tmp
- time /usr/bin/sed -f dollar.sed < dollar.inp > tmp2
- 0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp dollar.good tmp2
- time ./sed -f noeol.sed < noeol.inp > tmp
- 0.03user 0.00system 0:00.05elapsed 60%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp noeol.good tmp
- time /usr/bin/sed -f noeol.sed < noeol.inp > tmp2
- 0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp noeol.good tmp2
- time ./sed -f sub-num.sed < sub-num.inp > tmp
- 0.01user 0.01system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sub-num.good tmp
- time /usr/bin/sed -f sub-num.sed < sub-num.inp > tmp2
- 0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sub-num.good tmp2
- time ./sed -f sub-all.sed < sub-num.inp > tmp
- 0.01user 0.02system 0:00.08elapsed 37%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sub-all.good tmp
- time /usr/bin/sed -f sub-all.sed < sub-num.inp > tmp2
- 0.00user 0.02system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp sub-all.good tmp2
- time ./sed -f subwrite.sed < subwrite.inp > tmp1
- 0.01user 0.01system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp subwrite.good1 tmp1
- cmp subwrite.good2 tmp2
- time /usr/bin/sed -f subwrite.sed < subwrite.inp > tmp1
- 0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp subwrite.good1 tmp1
- cmp subwrite.good2 tmp2
- time ./sed -f head.sed < head.inp > tmp
- 0.00user 0.02system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp head.good tmp
- time /usr/bin/sed -f head.sed < head.inp > tmp2
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp head.good tmp2
- time ./sed -n -f middle.sed < head.inp > tmp
- 0.00user 0.01system 0:00.01elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp middle.good tmp
- time /usr/bin/sed -n -f middle.sed < head.inp > tmp2
- 0.00user 0.01system 0:00.02elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp middle.good tmp2
- time ./sed -f maddingcrowd.sed < maddingcrowd.inp > tmp
- 2.18user 0.36system 0:10.25elapsed 24%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp maddingcrowd.good
- echo DO NOT time /usr/bin/sed -f maddingcrowd.sed < maddingcrowd.inp > tmp2
- echo sed 2.05.... t->+inf
- time ./sed -f mac-mf.sed < mac-mf.inp > tmp
- 2.52user 0.14system 0:02.92elapsed 91%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp mac-mf.good
- time /usr/bin/sed -f mac-mf.sed < mac-mf.inp > tmp2
- 0.26user 0.14system 0:00.44elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp2 mac-mf.good
- time ./sed -f khadafy.sed < khadafy.inp > tmp
- 0.02user 0.00system 0:00.06elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp khadafy.inp
- time /usr/bin/sed -f khadafy.sed < khadafy.inp > tmp2
- 0.01user 0.03system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp2 khadafy.inp
- sh spencer.sh ./sed < spencer.inp > spencer.tmp
- sh spencer.tmp
- time ./sed -f linecnt.sed < linecnt.inp > tmp
- 0.00user 0.01system 0:00.05elapsed 20%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp linecnt.good
- time /usr/bin/sed -f linecnt.sed < linecnt.inp > tmp2
- 0.00user 0.01system 0:00.02elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp2 linecnt.good
- sh distrib.sh ./sed < distrib.inp > tmp
- cmp tmp distrib.good
- time ./sed -f writeout.sed < writeout.inp >tmp1
- 0.01user 0.03system 0:00.05elapsed 80%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp1 writeout.good1
- cmp tmp2 writeout.good2
- time ./sed -f readin.sed < readin.inp >tmp
- 0.01user 0.02system 0:00.05elapsed 60%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp readin.good
- time /usr/bin/sed -f readin.sed < readin.inp >tmp2
- 0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp2 readin.good
- ./sed --help > tmp1
- ./sed -h > tmp2
- ./sed > tmp3 2>&1
- make: [help] Error 4 (ignored)
- cmp tmp1 tmp2
- cmp tmp2 tmp3
- cmp tmp1 help.good
- tmp1 help.good differ: char 9, line 1
- make: [help] Error 1 (ignored)
- ./sed --version > tmp1 2>&1
- ./sed -V > tmp2 2>&1
- cmp tmp1 tmp2
- cmp tmp1 version.good
- time ./sed --file=newjis.sed < newjis.inp > tmp
- 0.01user 0.01system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp newjis.good tmp
- time /usr/bin/sed --file=newjis.sed < newjis.inp > tmp2
- 0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp newjis.good tmp2
- time ./sed --quiet -f cv-vars.sed < cv-vars.inp > tmp
- 0.03user 0.03system 0:00.06elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp cv-vars.good tmp
- time /usr/bin/sed --quiet -f cv-vars.sed < cv-vars.inp > tmp2
- 0.01user 0.02system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp cv-vars.good tmp2
- rm -f tmp tmp1 tmp2 tmp3 core junk spencer.tmp
- time ./sed -f 8to7.sed < 8bit.inp > tmp
- 0.00user 0.01system 0:00.03elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp 8to7.good
- tmp 8to7.good differ: char 1, line 1
- make: [8to7] Error 1 (ignored)
- time /usr/bin/sed -f 8to7.sed < 8bit.inp > tmp2
- 0.01user 0.01system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- 0inputs+0outputs (0major+0minor)pagefaults 0swaps
- cmp tmp2 8to7.good
- tmp2 8to7.good differ: char 1, line 1
- make: [8to7] Error 1 (ignored)
-
- one (known) failure for not having an obscure posix feature in sed.
- everything else works.
-
- perf very comperable with 2.05 on most of these (small) tests.
-
- rxdispencer totally wins on the maddingcrowd; 2.05 uses vast memory
- and takes "forever"
-
- rxdispencer annoyingly 10x slower on mac-mf. prbly acceptable for a release
- but....
-
-
-
- Fri Dec 29 13:54:34 PST 1995
-
- looking at mac-mf
- calls
- 0.00 0.00 8.36 470 canonical_unfa
-
- that suggests unfa caching is doing fine.
-
-
-
- 0.00 0.00 8.36 847 rx_really_free_superstate
-
- aha... we are overrunning the superstate cache.
-
- The top functions look suspicious:
-
- 5.86 0.49 3.26 299341 malloc
- 5.38 0.45 3.71 4376 rx_hash_store
- 4.78 0.40 4.11 147917 eclose_node
-
- once again ... that is a lot of calls to eclose_node
-
-
- 3.35 0.28 5.08 865 rx_superstate
-
- That is *really* weird. Almost as many superstates
- were really freed as were constructed.
-
- br in exit and look at the "default_cache" and process size:
-
- TSIZ DSIZ RSS
- 9767 pp4 T 0:09 168 120 2608 1728 xx 11.6 /home/lord/vac/rxdispencer/sed/testsuite/sed -f mac-mf.sed
-
-
- lru_superstate = 0x18c000,
- semifree_superstate = 0x0,
- empty_superset = 0x79d80,
- superstates = 239,
- semifree_superstates = 0,
- hits = 4,
- misses = 135,
- bytes_allowed = 1048576,
- bytes_used = 1052192,
-
- the hit/miss ratio is consistant with overrunning the cache.
- but why are there *no* semifree_superstates?
-
- br in semifree_superstate
- comm
- silent
- c
- end
-
-
- hit 584 times
-
- rx_really_free_superstate was (in a convoluted way) semifreeing
- superstates at about the same rate they were being really freed.
- unlikely to fix the perf. problem on mac-mf...but that is a bug
- the solution is to semifree at twice the rate of really_free.
-
- fix that and retry test.
-
- before:
-
- time ./sed -f mac-mf.sed < mac-mf.inp > tmp
- 8.22user 0.31system 0:15.97elapsed 53%CPU (0avgtext+0avgdata 0maxresident)k
-
-
- after:
-
- time ./sed -f mac-mf.sed < mac-mf.inp > tmp
- 8.37user 0.37system 0:10.84elapsed 80%CPU (0avgtext+0avgdata 0maxresident)k
-
- and cache stats:
-
- superstates = 238,
- semifree_superstates = 166,
- hits = 5,
- misses = 124,
- bytes_allowed = 1048576,
- bytes_used = 1047452,
-
- all of which is good news (except the hit/miss which still suggests
- the cache is being over-run.)
-
- re-compile with 4x superstate cache size
-
- time ./sed -f mac-mf.sed < mac-mf.inp > tmp
- 8.10user 0.60system 0:15.41elapsed 56%CPU (0avgtext+0avgdata 0maxresident)k
-
- hardly any change
-
- re-compile with 4x unfa cache size. slow down!
-
- time ./sed -f mac-mf.sed < mac-mf.inp > tmp
- 8.16user 0.49system 0:10.63elapsed 81%CPU (0avgtext+0avgdata 0maxresident)k
-
- odd cache data, too:
-
- superstates = 596,
- semifree_superstates = 0,
- hits = 17,
- misses = 596,
- bytes_allowed = 4194304,
- bytes_used = 2608228,
-
- far from overflowing the superstate cache
-
- p rx_basic_uv, the unfa cache:
-
- delay = 2048,
- delayed = 100,
-
- so that isn't overflowing either.
-
- exploring that structure more shows that the hash table is
- totally screwed -- everything hashes into the 0 bucket.
-
- out of 100 regexps to rexp_hash...got these results...not the
- greatest hash function.
-
- 0
- 1
- 4
- 5
- 61032
- 61033
- 61036
- 61037
-
- use more fields:
-
- 0
- 2
- 6
- 60954
- 4294906336
- 4294967290
-
- hmm.
-
- cribbed some hashing clue from ouster on grounds that hashing
- csets and rexp_nodes is almost like hashing strings.
-
- much nicer:
-
- 100 distinguishable calls to rexp_hash (distinct by addr of
- rexp_node) giving 100 distinct hash values. great.
-
-
- 0 (struct rexp_node *) 0x0
- 17006040 (struct rexp_node *) 0x74500
- 19131804 (struct rexp_node *) 0x5e0c0
- 21257568 (struct rexp_node *) 0x62e00
- 21789009 (struct rexp_node *) 0x62c40
- 22320450 (struct rexp_node *) 0x6b3c0
- 24446214 (struct rexp_node *) 0x62a40
- 24977655 (struct rexp_node *) 0x65cc0
- 30823506 (struct rexp_node *) 0x5e7c0
- 32417829 (struct rexp_node *) 0x65c80
- 34543593 (struct rexp_node *) 0x70bc0
- 35606475 (struct rexp_node *) 0x6e140
- 35846082 (struct rexp_node *) 0x74300
- 37200798 (struct rexp_node *) 0x70cc0
- 37732239 (struct rexp_node *) 0x70b40
- 40389444 (struct rexp_node *) 0x70c40
- 44109531 (struct rexp_node *) 0x70ac0
- 48892500 (struct rexp_node *) 0x6b640
- 65367171 (struct rexp_node *) 0x6e0c0
- 66430053 (struct rexp_node *) 0x70fc0
- 86351200 (struct rexp_node *) 0x6b900
- 110001468 (struct rexp_node *) 0x5eac0
- 225255629 (struct rexp_node *) 0x6b480
- 231371560 (struct rexp_node *) 0x70800
- 312638818 (struct rexp_node *) 0x5ee00
- 390934594 (struct rexp_node *) 0x70e40
- 517283529 (struct rexp_node *) 0x746c0
- 549067790 (struct rexp_node *) 0x1839c0
- 572893326 (struct rexp_node *) 0x6b080
- 601001026 (struct rexp_node *) 0x27f580
- 606081253 (struct rexp_node *) 0x65dc0
- 607263981 (struct rexp_node *) 0x69680
- 621718215 (struct rexp_node *) 0x27f6c0
- 650824273 (struct rexp_node *) 0x6ef40
- 826472566 (struct rexp_node *) 0x6b2c0
- 868635774 (struct rexp_node *) 0x65f00
- 876091122 (struct rexp_node *) 0x206140
- 888472439 (struct rexp_node *) 0x6e400
- 929543565 (struct rexp_node *) 0x1e0b80
- 931845394 (struct rexp_node *) 0x206180
- 1058747076 (struct rexp_node *) 0x183900
- 1207849365 (struct rexp_node *) 0x67880
- 1278079982 (struct rexp_node *) 0x69f00
- 1295802040 (struct rexp_node *) 0x27f480
- 1310711465 (struct rexp_node *) 0x1e0b40
- 1352930633 (struct rexp_node *) 0x76240
- 1353620468 (struct rexp_node *) 0x27f700
- 1356456513 (struct rexp_node *) 0x79ac0
- 1379844369 (struct rexp_node *) 0x62400
- 1402493327 (struct rexp_node *) 0x6bfc0
- 1601102720 (struct rexp_node *) 0x5ef00
- 1772669690 (struct rexp_node *) 0x183940
- 1900599955 (struct rexp_node *) 0x27f440
- 1968417710 (struct rexp_node *) 0xac140
- 2108985499 (struct rexp_node *) 0x79b00
- 2137694068 (struct rexp_node *) 0x651c0
- 2204601669 (struct rexp_node *) 0x27f600
- 2218807864 (struct rexp_node *) 0x799c0
- 2223118861 (struct rexp_node *) 0x74780
- 2236502798 (struct rexp_node *) 0x79840
- 2278246773 (struct rexp_node *) 0x27f640
- 2290967666 (struct rexp_node *) 0x73980
- 2298725010 (struct rexp_node *) 0x1be500
- 2303527273 (struct rexp_node *) 0xaca80
- 2381124070 (struct rexp_node *) 0x27f680
- 2418247494 (struct rexp_node *) 0x62200
- 2437460954 (struct rexp_node *) 0xac000
- 2439348845 (struct rexp_node *) 0x79140
- 2455486158 (struct rexp_node *) 0x695c0
- 2662071862 (struct rexp_node *) 0x183980
- 2745345239 (struct rexp_node *) 0x74040
- 2832160954 (struct rexp_node *) 0x70400
- 2900057973 (struct rexp_node *) 0x76940
- 2918628823 (struct rexp_node *) 0x79d00
- 2956546377 (struct rexp_node *) 0x1e0b00
- 3017127356 (struct rexp_node *) 0x27f400
- 3031395249 (struct rexp_node *) 0xac1c0
- 3111540809 (struct rexp_node *) 0xac180
- 3225480365 (struct rexp_node *) 0x27f540
- 3277401564 (struct rexp_node *) 0xe5b40
- 3409840041 (struct rexp_node *) 0x27f740
- 3441564462 (struct rexp_node *) 0x27f3c0
- 3456946400 (struct rexp_node *) 0x65940
- 3496700879 (struct rexp_node *) 0x27f4c0
- 3531401660 (struct rexp_node *) 0x62cc0
- 3546066190 (struct rexp_node *) 0x73f80
- 3547538510 (struct rexp_node *) 0x790c0
- 3548169742 (struct rexp_node *) 0x1e0d40
- 3589031006 (struct rexp_node *) 0x79dc0
- 3782143090 (struct rexp_node *) 0x79040
- 3824014835 (struct rexp_node *) 0x693c0
- 3837791013 (struct rexp_node *) 0x6ed80
- 4036337975 (struct rexp_node *) 0x27f5c0
- 4063573689 (struct rexp_node *) 0x5e580
- 4107576897 (struct rexp_node *) 0x2061c0
- 4140954487 (struct rexp_node *) 0x73080
- 4168978309 (struct rexp_node *) 0x79b40
- 4185396955 (struct rexp_node *) 0x27f500
- 4200919815 (struct rexp_node *) 0x5e640
- 4247337862 (struct rexp_node *) 0xaca00
-
-
-
- but they still all go into the same damn bucket.
-
- oops...H2B (hash->bucket) in rxhash.c was bogus do to a recent change away from %13.
- fixed for 16 buckets --- still considering going back to %13
-
- anyway...much better...here is rx_basic_uv...notice the spreading
- of elements across all buckets in the hash table
-
- {
- delay = 2048,
- delayed = 100,
- table = {
- parent = 0x0,
- refs = 16,
- nested_p = 65535,
- children = {0x59180, 0xb0c80, 0x8e380, 0x14dd80,
- 0xd6380, 0x8e880, 0x59d00, 0x217d80,
- 0x59900, 0x59600, 0xd6000, 0x1f8380,
- 0xd6580, 0x59b80, 0x59e80, 0x59f00}
- },
- free_queue = 0x103960
- }
-
- and overall time:
-
-
- before (-pg):
-
- time ./sed -f mac-mf.sed < mac-mf.inp > tmp
- 8.37user 0.37system 0:10.84elapsed 80%CPU (0avgtext+0avgdata 0maxresident)k
-
-
- after:
-
- 6.94user 0.59system 0:13.71elapsed 54%CPU (0avgtext+0avgdata 0maxresident)k
-
-
- Here is the superstate cache stats
-
- superstates = 596,
- semifree_superstates = 0,
- hits = 17,
- misses = 596,
- bytes_allowed = 4194304,
- bytes_used = 2611648,
-
- this and the unfa cache make it clear that caching is not an issue now.
-
- gprof says:
- 33.33 2.50 2.50 mcount
- 9.47 0.71 3.21 299018 malloc
- 5.47 0.41 3.62 613 rx_superstate
- 4.53 0.34 3.96 147465 eclose_node
- 4.13 0.31 4.27 141219 rx_unfa
- 3.73 0.28 4.55 280370 free
- 3.33 0.25 4.80 5042 rx_regmatch
- 3.20 0.24 5.04 141219 rx_free_unfa
- 3.20 0.24 5.28 141219 rx_start_superstate
- 2.13 0.16 5.44 145590 bzero
- 2.13 0.16 5.60 141219 rx_make_solutions
- 2.00 0.15 5.75 82154 rx_fit_p
- 1.87 0.14 5.89 82154 rx_str_vmfn
- 1.87 0.14 6.03 4039 rx_hash_store
- 1.47 0.11 6.14 141444 rx_next_solution
- 1.47 0.11 6.25 82154 rx_soluntion_fit_p
- 1.33 0.10 6.35 146135 hash_se_prog
- 1.33 0.10 6.45 143200 rx_free_solutions
- 1.33 0.10 6.55 9006 rx_regexec
- 1.20 0.09 6.64 142747 rx_state_possible_futures
- 1.20 0.09 6.73 138315 rx_basic_make_solutions
-
-
-
- Ripe for the picken'....
-
- every one of these:
- 2.13 0.16 5.60 141219 rx_make_solutions
-
- which calls here:
-
- 3.20 0.24 5.28 141219 rx_start_superstate
-
- which calls here
-
- 1.20 0.09 6.64 142747 rx_state_possible_futures
-
- which calls here
-
- 4.53 0.34 3.96 147465 eclose_node
-
-
- the starting superstate should be better cached than that.
- oops...this is another optimization not carried over from the
- old rx.
-
- looking further....grr!
-
- struct rx_possible_future *
- rx_state_possible_futures (rx, n)
- struct rx * rx;
- struct rx_nfa_state * n;
- #endif
- {
- if (n->futures_computed)
- return n->futures;
- else
- {
- struct eclose_frame frame;
- frame.prog_backwards = 0;
- if (!eclose_node (rx, n, n, &frame))
- return 0;
- else
- {
- struct rx_possible_future * p;
- return n->futures;
- }
- }
- }
-
- that's the only occurence of "futures_computed" ...oops...
- fixing that...
-
- before:
-
- 6.94user 0.59system 0:13.71elapsed 54%CPU (0avgtext+0avgdata 0maxresident)k
-
- after:
-
- 5.75user 0.32system 0:07.17elapsed 84%CPU (0avgtext+0avgdata 0maxresident)k
-
-
- profiling
-
- % time seconds cumsec calls function
- 34.00 2.05 2.05 mcount
- 7.63 0.46 2.51 299018 malloc
- 5.31 0.32 2.83 141219 rx_start_superstate
- 4.64 0.28 3.11 280370 free
- 4.48 0.27 3.38 141219 rx_unfa
- 4.15 0.25 3.63 141219 rx_make_solutions
- 3.81 0.23 3.86 613 rx_superstate
- 3.65 0.22 4.08 5042 rx_regmatch
- 3.48 0.21 4.29 141219 rx_free_unfa
- 2.49 0.15 4.44 82154 rx_fit_p
- 2.16 0.13 4.57 142747 rx_state_possible_futures
- 1.82 0.11 4.68 145590 bzero
- 1.82 0.11 4.79 138315 rx_basic_make_solutions
- 1.82 0.11 4.90 9006 regnexec
- 1.66 0.10 5.00 143200 rx_free_solutions
- 1.49 0.09 5.09 130333 supersetcmp
- 1.49 0.09 5.18 82154 rx_soluntion_fit_p
- 1.49 0.09 5.27 4039 rx_hash_store
- 1.33 0.08 5.35 745 __sbrk
- 1.16 0.07 5.42 141444 rx_next_solution
- 1.00 0.06 5.48 229493 rx_free_rexp
-
-
- so good, eclose_node is off the map.
-
-
- -O time:
-
- before (last known):
- time ./sed -f mac-mf.sed < mac-mf.inp > tmp
- 21.74user 0.16system 0:21.90elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
-
- after:
- 2.34user 0.36system 0:02.72elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
-
- but 2.05 is still:
-
- time /usr/bin/sed -f mac-mf.sed < mac-mf.inp > tmp2
- 0.28user 0.11system 0:00.39elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
-
-
- code reordering in rx_start_superstate should eliminate calls to rx_state_possible_futures
-
- after (-O):
- 2.28user 0.34system 0:02.64elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
-
- hehe -O2:
-
- 2.32user 0.31system 0:02.64elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- Fri Dec 29 16:43:44 PST 1995
-
- getting harder to speed up now.
-
- one observation is that malloc is the heaviest function, and almost
- all the calls there come from rx_basic_make_solutions and rx_make_solutions.
-
- put in a (thread-losing) malloc/free buffer for the two spots where
- malloc/free are called often.
-
- -pg mac-mf before:
-
- 5.75user 0.32system 0:07.17elapsed 84%CPU (0avgtext+0avgdata 0maxresident)k
-
- after (!):
-
- 3.98user 0.45system 0:04.74elapsed 93%CPU (0avgtext+0avgdata 0maxresident)k
-
- (after profiling) inlined the common & fastest path through rx_start_superstate
- into rx_make_solutions.
-
- after:
- 3.88user 0.41system 0:04.34elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k
-
- back that one out since it is a tiny win and maintainence headache.
-
- -O
-
- time ./sed -f enable.sed < enable.inp > tmp
- 0.00user 0.03system 0:00.05elapsed 60%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f enable.sed < enable.inp > tmp2
- 0.01user 0.02system 0:00.05elapsed 60%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -f sep.sed < sep.inp > tmp
- 0.02user 0.03system 0:00.06elapsed 83%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f sep.sed < sep.inp > tmp2
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -f inclib.sed < inclib.inp > tmp
- 0.00user 0.03system 0:00.05elapsed 60%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f inclib.sed < inclib.inp > tmp2
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -f 8bit.sed < 8bit.inp > tmp
- 0.00user 0.02system 0:00.05elapsed 40%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f 8bit.sed < 8bit.inp > tmp2
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -f newjis.sed < newjis.inp > tmp
- 0.01user 0.01system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f newjis.sed < newjis.inp > tmp2
- 0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -n -f cv-vars.sed < cv-vars.inp > tmp
- 0.01user 0.05system 0:00.08elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -n -f cv-vars.sed < cv-vars.inp > tmp2
- 0.01user 0.02system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -f manis.sed < manis.inp > tmp
- 0.07user 0.02system 0:00.09elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f manis.sed < manis.inp > tmp2
- 0.02user 0.01system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -f xabcx.sed < xabcx.inp > tmp
- 0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f xabcx.sed < xabcx.inp > tmp2
- 0.01user 0.03system 0:00.12elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -f dollar.sed < dollar.inp > tmp
- 0.01user 0.02system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f dollar.sed < dollar.inp > tmp2
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -f noeol.sed < noeol.inp > tmp
- 0.01user 0.01system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f noeol.sed < noeol.inp > tmp2
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -f sub-num.sed < sub-num.inp > tmp
- 0.00user 0.03system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f sub-num.sed < sub-num.inp > tmp2
- 0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -f sub-all.sed < sub-num.inp > tmp
- 0.01user 0.00system 0:00.03elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f sub-all.sed < sub-num.inp > tmp2
- 0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -f subwrite.sed < subwrite.inp > tmp1
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f subwrite.sed < subwrite.inp > tmp1
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -f head.sed < head.inp > tmp
- 0.00user 0.01system 0:00.03elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f head.sed < head.inp > tmp2
- 0.00user 0.01system 0:00.02elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -n -f middle.sed < head.inp > tmp
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -n -f middle.sed < head.inp > tmp2
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -f maddingcrowd.sed < maddingcrowd.inp > tmp
- 2.64user 0.70system 0:05.88elapsed 56%CPU (0avgtext+0avgdata 0maxresident)k
- echo DO NOT time /usr/bin/sed -f maddingcrowd.sed < maddingcrowd.inp > tmp2
- echo sed 2.05.... t->+inf
-
-
-
- time ./sed -f mac-mf.sed < mac-mf.inp > tmp
- 1.51user 0.30system 0:01.91elapsed 94%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f mac-mf.sed < mac-mf.inp > tmp2
- 0.30user 0.10system 0:00.45elapsed 88%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -f khadafy.sed < khadafy.inp > tmp
- 0.01user 0.01system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f khadafy.sed < khadafy.inp > tmp2
- 0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- sh spencer.sh ./sed < spencer.inp > spencer.tmp
- sh spencer.tmp
-
-
-
- time ./sed -f linecnt.sed < linecnt.inp > tmp
- 0.00user 0.02system 0:00.04elapsed 50%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f linecnt.sed < linecnt.inp > tmp2
- 0.00user 0.02system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed -f readin.sed < readin.inp >tmp
- 0.02user 0.02system 0:00.05elapsed 80%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed -f readin.sed < readin.inp >tmp2
- 0.01user 0.01system 0:00.06elapsed 33%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed --file=newjis.sed < newjis.inp > tmp
- 0.01user 0.01system 0:00.03elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed --file=newjis.sed < newjis.inp > tmp2
- 0.00user 0.03system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
- time ./sed --quiet -f cv-vars.sed < cv-vars.inp > tmp
- 0.03user 0.02system 0:00.05elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
- time /usr/bin/sed --quiet -f cv-vars.sed < cv-vars.inp > tmp2
- 0.01user 0.02system 0:00.03elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
-
-
-
-
-
-